fread関数は、ファイルからレコード単位に入力します。主に、バイナリデータを入力するために使用します。
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
*ptrは入力したデータを格納する領域を指定します。
sizeはレコード長をバイト単位で指定します。
nmembは入力するレコードの個数を指定します。
*streamはfopen関数で取得した、ファイルポインタを指定します。
戻り値として、入力したレコードの個数を返します。EOF又は、エラーの場合は、指定した個数より小さな値(又は0)を返します。
次の例題プログラムは番号、身長、体重、肥満度(BMI)を登録してあるbmi.datファイル(固定長バイナリレコード形式)から入力して、それぞれの値を出力します。
プログラム 例
#include <stdio.h>
int main()
{
struct bmi_type {
int number; /* 番号 */
double weight; /* 体重 */
double height; /* 身長 */
double bmi; /* 肥満度 */
} bmi_rec; /* 肥満度データ */
FILE *fp;
int return_code = 0;
if ((fp = fopen('bmi.dat', 'rb')) != NULL) {
while(fread(&bmi_rec, sizeof(bmi_rec), 1, fp) == 1) {
printf('%03d番目\n', bmi_rec.number);
printf('\t体重:%.2fKg\n', bmi_rec.weight);
printf('\t身長:%.2fCm\n', bmi_rec.height);
printf('\t肥満度(BMI):%.2f\n', bmi_rec.bmi);
}
fclose(fp);
}
else {
printf('ファイルのオープンに失敗しました\n');
return_code = 1;
}
return return_code;
}
例の実行結果
$ ./fread.exe
001番目
体重:67.50Kg
身長:175.50Cm
肥満度(BMI):21.92
002番目
体重:88.00Kg
身長:187.80Cm
肥満度(BMI):24.95
003番目
体重:54.30Kg
身長:164.00Cm
肥満度(BMI):20.19
$